<html>
<head><meta charset="utf-8"><title>simplify chalk context trait and logic-engine #255 · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html">simplify chalk context trait and logic-engine #255</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="178701617"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178701617" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178701617">(Oct 21 2019 at 21:42)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> Here's a topic for the issue, in case there end up being multiple related PRs</p>



<a name="178701741"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178701741" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178701741">(Oct 21 2019 at 21:44)</a>:</h4>
<p>I haven't started too much down the rabbit hole of your suggestion, but the only hiccup I see happening is that <code>program_clauses</code> calls <code>self.infer.var_is_bound</code></p>



<a name="178701904"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178701904" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178701904">(Oct 21 2019 at 21:46)</a>:</h4>
<p>But the only place it's called (<code>push_initial_strands_instantiated</code>), we have an <code>infer</code>, so I think it'll be fine</p>



<a name="178702036"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178702036" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178702036">(Oct 21 2019 at 21:48)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> I suppose we can pass the infer into that fn -- that's what you mean, right?</p>



<a name="178702078"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178702078" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178702078">(Oct 21 2019 at 21:49)</a>:</h4>
<p>Yep exactly</p>



<a name="178704015"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178704015" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178704015">(Oct 21 2019 at 22:12)</a>:</h4>
<p>Ok so I was able to move <code>program_clauses</code> to <code>ContextOps</code>. Did end up needing to make <code>InferenceTable</code> an associated type on <code>Context</code>, but I think it actually mirrors the other associated types well. Now I need to actually move <code>infer</code> back onto Strand</p>



<a name="178779067"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178779067" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178779067">(Oct 22 2019 at 17:50)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> So I was able to move infer back to strand and remove CanonicalStrand, but a lot of tests are failing, so I didn't correctly account for canonicalization. But I looked again at rustc's use of Chalk, and it's InferenceTable has a lifetime, so I don't know if we can store InferenceTable in Strand anyways.</p>



<a name="178791103"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178791103" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178791103">(Oct 22 2019 at 19:36)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> it should be fine, it only has the tcx lifetime, and so does the Context type</p>



<a name="178791108"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178791108" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178791108">(Oct 22 2019 at 19:36)</a>:</h4>
<p>well, i've not double checked :) but that should be the case</p>



<a name="178791178"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178791178" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178791178">(Oct 22 2019 at 19:37)</a>:</h4>
<p>Yeah, looking again, I think it should be okay. Mostly just have to figure out why I made the tests fail</p>



<a name="178961938"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178961938" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178961938">(Oct 24 2019 at 15:09)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> you around? I have some questions/discussion.</p>



<a name="178961953"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178961953" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178961953">(Oct 24 2019 at 15:09)</a>:</h4>
<p>Yes</p>



<a name="178961991"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178961991" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178961991">(Oct 24 2019 at 15:09)</a>:</h4>
<p>What's the advantage of having a separate UCanonicalGoalInEnvironment versus just a CanonicalGoalInEnvironment?</p>



<a name="178962106"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962106" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962106">(Oct 24 2019 at 15:10)</a>:</h4>
<p>I'm trying to remember :) Ah, well, I think that the different is</p>



<a name="178962125"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962125" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962125">(Oct 24 2019 at 15:10)</a>:</h4>
<p><code>UCanonicalGoalInEnvironment</code> "renumbers" the universes to be minimal</p>



<a name="178962136"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962136" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962136">(Oct 24 2019 at 15:11)</a>:</h4>
<p>this makes sense for a query or at the "start" of things</p>



<a name="178962153"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962153" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962153">(Oct 24 2019 at 15:11)</a>:</h4>
<p>but CanonicalGoalInEnvironment does not, which makes sense for an answer or other thing that occurs inside of some context</p>



<a name="178962176"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962176" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962176">(Oct 24 2019 at 15:11)</a>:</h4>
<p>at least, that's the main difference <code>UCanonical</code> and <code>Canonical</code> in general</p>



<a name="178962192"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962192" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962192">(Oct 24 2019 at 15:11)</a>:</h4>
<p>not sure <em>specifically</em> about <code>GoalInEnvironment</code></p>



<a name="178962250"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962250" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962250">(Oct 24 2019 at 15:12)</a>:</h4>
<p>well I guess that's the type we use for the "answer" to a query, maybe</p>



<a name="178962354"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962354" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962354">(Oct 24 2019 at 15:13)</a>:</h4>
<p>And, I'm still trying to wrap my head around where things get canonicalized/uncanonicalized. When I removed CanonicalGoal, I sort of just assumed that I should just be able to pass around the CanonicalizedExClause (with accessing the inner ExClause), but that wasn't an accurate assumption. So seems like still need to more or less keep the canonicalization/uncanonicalization as things get passed around</p>



<a name="178962574"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962574" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962574">(Oct 24 2019 at 15:15)</a>:</h4>
<p>Right, so I guess my question between <code>UCanonicalGoalInEnvironment</code> and <code>CanonicalGoalInEnvironment</code> is it is ever necessary to <em>know</em> that you're not the first universe? Like, if all canonicalization renumbered the universe to be minimal?</p>



<a name="178962597"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962597" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962597">(Oct 24 2019 at 15:15)</a>:</h4>
<p>OK. I guess I would summarize it as:</p>
<ul>
<li>canonicalization in general happens when you cross between inference contexts</li>
<li>this can happen when you start a new query, and when you produce a result<br>
    * when starting a new query, you also canonicalize universes<br>
    * when producing a result, you are referencing the universes from the start of the query</li>
</ul>



<a name="178962683"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962683" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962683">(Oct 24 2019 at 15:16)</a>:</h4>
<p>So imagine that we had a query like <code>Implemented(?X: Foo&lt;!22, !23&gt;)</code></p>



<a name="178962700"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962700" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962700">(Oct 24 2019 at 15:16)</a>:</h4>
<p>here we are saying -- give me all types that implement <code>Foo&lt;!22, !23&gt;</code>, and maybe <code>?X</code> is in universe 0</p>



<a name="178962713"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962713" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962713">(Oct 24 2019 at 15:16)</a>:</h4>
<p>in that case, it doesn't really matter that the placeholders are in universes 22 and 23</p>



<a name="178962716"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962716" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962716">(Oct 24 2019 at 15:17)</a>:</h4>
<p>what's important is the relative ordering</p>



<a name="178962739"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962739" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962739">(Oct 24 2019 at 15:17)</a>:</h4>
<p>we canonicalize this to <code>Implemented(?X: Foo&lt;!1, !2&gt;)</code></p>



<a name="178962760"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962760" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962760">(Oct 24 2019 at 15:17)</a>:</h4>
<p>ok, maybe not the best example, I hit a minor roadbock -- let's say that <code>?X</code> is in universe 23, so it can name either <code>!22</code> or <code>!23</code></p>



<a name="178962779"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962779" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962779">(Oct 24 2019 at 15:17)</a>:</h4>
<p>(I'm kind of assuming some basic familiarity with how universes work, let me know if that's incorrect)</p>



<a name="178962829"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962829" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962829">(Oct 24 2019 at 15:18)</a>:</h4>
<blockquote>
<p>we canonicalize this to <code>Implemented(?X: Foo&lt;!1, !2&gt;)</code></p>
</blockquote>
<p>I should have said we <em>ucanonicalize</em> this</p>



<a name="178962859"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962859" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962859">(Oct 24 2019 at 15:18)</a>:</h4>
<p>and if we include all the info, I guess it's like <code>exists&lt;?X in U2&gt; { Implemented(?X: Foo&lt;!1, !2&gt;) }</code></p>



<a name="178962891"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962891" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962891">(Oct 24 2019 at 15:18)</a>:</h4>
<p>or you could sort of "rephrase" that as saying that we canonicalize to <code>forall&lt;A&gt; { forall&lt;B&gt; { exists&lt;C&gt; { Implemented(C: Foo&lt;A, B&gt;) } } }</code></p>



<a name="178962895"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962895" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962895">(Oct 24 2019 at 15:18)</a>:</h4>
<p>with me so far?</p>



<a name="178962962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178962962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178962962">(Oct 24 2019 at 15:19)</a>:</h4>
<p>one sec, let me try to follow</p>



<a name="178963116"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963116" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963116">(Oct 24 2019 at 15:21)</a>:</h4>
<p>OK, here's a way to look at it. Every universe corresponds to some <code>forall</code> that we are "inside" of -- </p>
<p>So</p>
<div class="codehilite"><pre><span></span>forall&lt;A&gt; { A: Foo }
</pre></div>


<p>when we enter the <code>forall</code>, we replace <code>A</code> with <code>!1</code>, etc</p>



<a name="178963129"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963129" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963129">(Oct 24 2019 at 15:21)</a>:</h4>
<p>the problem is that sometimes we have foralls which we are inside of but which are not relevant</p>



<a name="178963130"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963130" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963130">(Oct 24 2019 at 15:21)</a>:</h4>
<p>e.g.</p>



<a name="178963157"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963157" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963157">(Oct 24 2019 at 15:21)</a>:</h4>
<p>Can you clarify the syntax here? <code>!22</code> means universe 22, right?</p>



<a name="178963206"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963206" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963206">(Oct 24 2019 at 15:22)</a>:</h4>
<p>if we start with </p>
<div class="codehilite"><pre><span></span>forall&lt;A&gt; { forall&lt;B&gt; { A: Foo, B: Bar&lt;A&gt; } }
</pre></div>


<p>we would then have to prove just the first part (to start)</p>
<div class="codehilite"><pre><span></span>forall&lt;A&gt; { forall&lt;B&gt; { A: Foo } }
</pre></div>


<p>but here, <code>B</code> is not relevant</p>



<a name="178963228"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963228" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963228">(Oct 24 2019 at 15:22)</a>:</h4>
<blockquote>
<p>Can you clarify the syntax here? <code>!22</code> means universe 22, right?</p>
</blockquote>
<p>yeah, "placeholder in universe 22"</p>



<a name="178963275"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963275" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963275">(Oct 24 2019 at 15:23)</a>:</h4>
<p>As opposed to <code>^0</code> or <code>?0</code>?</p>



<a name="178963290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963290">(Oct 24 2019 at 15:23)</a>:</h4>
<p>right so <code>^0</code> refers to a <em>bound</em> variable--</p>



<a name="178963301"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963301" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963301">(Oct 24 2019 at 15:23)</a>:</h4>
<p>so e.g. <code>forall&lt;X&gt; { ... }</code>, in there, <code>X</code> is bound (we see the binder)</p>



<a name="178963329"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963329" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963329">(Oct 24 2019 at 15:23)</a>:</h4>
<p>Ok, then when canonicalized <code>X</code> would be converted to <code>^0</code>?</p>



<a name="178963382"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963382" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963382">(Oct 24 2019 at 15:24)</a>:</h4>
<p>but when we "enter" the <code>forall</code>, and wish to look at the terms inside, we kind of move that binder into the environment (by making a univese) and replace <code>X</code> with <code>!U</code> where <code>U</code> is that new universe</p>



<a name="178963409"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963409" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963409">(Oct 24 2019 at 15:24)</a>:</h4>
<blockquote>
<p>Ok, then when canonicalized <code>X</code> would be converted to <code>^0</code>?</p>
</blockquote>
<p>yes, because canonicalization basically adds a level of binder around the whole thing</p>



<a name="178963427"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963427" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963427">(Oct 24 2019 at 15:24)</a>:</h4>
<p>Also, the only place that <code>infer.canonicalize_goal</code> is called is in <code>abstract_positive_literal</code> and <code>abstract_negative_literal</code>, but that immediately get's converted to a <code>UCanonicalizedGoalInEvironment</code> in <code>get_or_create_table_for_subgoal</code></p>



<a name="178963436"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963436" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963436">(Oct 24 2019 at 15:24)</a>:</h4>
<p>I'm struggling with how to convey this sense but basically</p>



<a name="178963468"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963468" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963468">(Oct 24 2019 at 15:25)</a>:</h4>
<p>Thanks for going through this with me. Like I said, trying to wrap my head around it all</p>



<a name="178963478"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963478" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963478">(Oct 24 2019 at 15:25)</a>:</h4>
<p>you have terms (types, etc) and they can either reference things from the surrounding environment ("free variables") or they can include a binder and reference back to that -- and there is some implicit point that we are maintaining always</p>



<a name="178963507"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963507" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963507">(Oct 24 2019 at 15:25)</a>:</h4>
<p>so e.g. in terms of our representation when you see <code>forall&lt;type&gt; { ^0: Debug }</code>, that <code>^0</code> is referring back to the innermost binder (a "type")</p>



<a name="178963535"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963535" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963535">(Oct 24 2019 at 15:26)</a>:</h4>
<p>(that's our debug notation, the variables are not named)</p>



<a name="178963561"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963561" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963561">(Oct 24 2019 at 15:26)</a>:</h4>
<p>in more conventional notation it would be like <code>forall&lt;T&gt; { T: Debug }</code></p>



<a name="178963632"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963632" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963632">(Oct 24 2019 at 15:27)</a>:</h4>
<p>These are debruijn indices right?</p>



<a name="178963634"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963634" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963634">(Oct 24 2019 at 15:27)</a>:</h4>
<p>but when we want to try and prove that to be true, we "enter" the <code>forall</code> -- kind of shifting the "current point" between what is bound and free. So we create the next universe <code>U</code>  and replace the bound variable (<code>^0</code>, or <code>T</code>) with <code>!U</code>, leaving us with a new term <code>!U: Debug</code> -- note that there is no <code>forall</code> here, it's in the environment now</p>



<a name="178963674"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963674" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963674">(Oct 24 2019 at 15:27)</a>:</h4>
<blockquote>
<p>Also, the only place that <code>infer.canonicalize_goal</code> is called is in <code>abstract_positive_literal</code> and <code>abstract_negative_literal</code>, but that immediately get's converted to a <code>UCanonicalizedGoalInEvironment</code> in <code>get_or_create_table_for_subgoal</code></p>
</blockquote>
<p>it may be that we don't need to have <code>CanonicalizedGoalInEnvornment</code> as a separate type</p>



<a name="178963724"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963724" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963724">(Oct 24 2019 at 15:28)</a>:</h4>
<p>but the distinction between u-canonical and canonical is still important more generally</p>



<a name="178963954"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963954" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963954">(Oct 24 2019 at 15:30)</a>:</h4>
<p>Ok I think I understand a bit better now, thanks</p>



<a name="178963960"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963960" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963960">(Oct 24 2019 at 15:30)</a>:</h4>
<p>to circle back to my example, basically the output of just <em>canonicalization</em> our query is something like this</p>
<div class="codehilite"><pre><span></span>forall&lt;A&gt; { forall&lt;B&gt; { A: Foo } }
                        ^ implicit point is here, in terms of what&#39;s in environment and what&#39;s in the terms we are manipulating
</pre></div>


<p>so u-canonicalization is just removing that unused <code>forall&lt;B&gt;</code>, basically</p>



<a name="178963979"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178963979" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178963979">(Oct 24 2019 at 15:30)</a>:</h4>
<p>but the thing I was going to say was that when you produce an <em>output</em>, you don't want to do that, because the output is expressed in terms of those foralls that were in the environment</p>



<a name="178964007"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178964007" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178964007">(Oct 24 2019 at 15:31)</a>:</h4>
<p>e.g., we might say <code>?X: SomeTrait</code> is true if <code>?X = !1</code>, and we need to know which <code>!1</code> that is</p>



<a name="178964021"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178964021" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178964021">(Oct 24 2019 at 15:31)</a>:</h4>
<p>we could I guess renumbering things but it'd be silly because we'd immediately want to reference back</p>



<a name="178965289"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178965289" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178965289">(Oct 24 2019 at 15:42)</a>:</h4>
<p>Ok so, to just sort of sum it up, if I understand correctly:<br>
If our query is<br>
<code>forall&lt;A&gt; { forall&lt;B&gt; { A: Foo } }</code><br>
that would be canonicalized to <br>
<code>forall&lt;type&gt; { forall&lt;type&gt; { ^1: Foo } }</code><br>
and then ucanonicalized to<br>
<code>!1: Foo</code><br>
I feel like I've missed something.</p>



<a name="178966095"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966095" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966095">(Oct 24 2019 at 15:49)</a>:</h4>
<p>well</p>



<a name="178966112"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966112" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966112">(Oct 24 2019 at 15:49)</a>:</h4>
<p>ok so</p>



<a name="178966197"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966197" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966197">(Oct 24 2019 at 15:50)</a>:</h4>
<p>it would be canonicalized for <code>forall&lt;type&gt; { forall&lt;type&gt; { ^1: Foo }</code> and then ucanonicalized to</p>
<p><code>forall&lt;type&gt; { ^0: Foo }</code></p>



<a name="178966241"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966241" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966241">(Oct 24 2019 at 15:50)</a>:</h4>
<p>oh</p>



<a name="178966257"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966257" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966257">(Oct 24 2019 at 15:50)</a>:</h4>
<p><em>then</em> when we start <em>processing</em> the query</p>



<a name="178966285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178966285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178966285">(Oct 24 2019 at 15:50)</a>:</h4>
<p>we would convert that to <code>!1: Foo</code></p>



<a name="178968095"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178968095" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178968095">(Oct 24 2019 at 16:07)</a>:</h4>
<p>Ok so, taking a step back. What exactly is the goal of removing <code>CanonicalStrand</code>? Or, more-so, what's the benefit of storing <code>infer</code> in <code>Strand</code>? Is the intention that we pass a canonicalized strand around or the uncanonicalized strand then canonicalize where needed?</p>



<a name="178968345"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178968345" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178968345">(Oct 24 2019 at 16:09)</a>:</h4>
<p>I guess I should probably go back to the commit that added <code>CanonicalStrand</code> and look at how it was used before</p>



<a name="178971442"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178971442" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178971442">(Oct 24 2019 at 16:43)</a>:</h4>
<blockquote>
<p>Ok so, taking a step back. What exactly is the goal of removing <code>CanonicalStrand</code>? Or, more-so, what's the benefit of storing <code>infer</code> in <code>Strand</code>? Is the intention that we pass a canonicalized strand around or the uncanonicalized strand then canonicalize where needed?</p>
</blockquote>
<p>the benefit is not having to canonicalize when we suspend a strand and to "de-canonicalize" when we restore one</p>



<a name="178971481"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178971481" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178971481">(Oct 24 2019 at 16:43)</a>:</h4>
<p>it's a purely a runtime optimization</p>



<a name="178971495"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178971495" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178971495">(Oct 24 2019 at 16:43)</a>:</h4>
<p>perhaps also a (to my mind) conceptual simplification</p>



<a name="178971611"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/178971611" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#178971611">(Oct 24 2019 at 16:44)</a>:</h4>
<p>in that I think you want to have one inference context per .. hmm .. "active environment" in which work is being done, and a strand is one such environment (similarly, the code in the compiler creates one inference context per function, etc)</p>



<a name="179011356"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179011356" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179011356">(Oct 25 2019 at 00:23)</a>:</h4>
<p>Ok. So. I think there's some subtlety here that I'm not seeing. I have a feeling that it has to do with the InferenceTable now being persistent instead being re-created every time a <code>CanonicalStrand</code> get instantiated into a <code>Strand</code>. Either that, some state is getting shared when <code>Strand</code>s are supposed to cloned fresh. Which is causing a bunch of tests to fail, and I honestly don't know why. So I think a better approach to this is to take a step back to the known-passing code, add some unit tests that specifically test behavior in chalk-engine, instead of only the integration tests in the root.</p>



<a name="179067190"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067190" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067190">(Oct 25 2019 at 16:44)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> I can also take a look</p>



<a name="179067221"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067221" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067221">(Oct 25 2019 at 16:45)</a>:</h4>
<p>unit testing chalk-engine seems fine too, though in general I'd prefer to keep most of our unit tests "high level" precisely so they survive big refactorings like this</p>



<a name="179067674"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067674" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067674">(Oct 25 2019 at 16:50)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> If you want to take a look/have time, I've pushed a branch to my fork with that commit that removes <code>CanonicalStrand</code> <a href="https://github.com/jackh726/chalk/commit/511b4f247e48a5b0d8ddc5e8bf84f0e3c1cd3337" target="_blank" title="https://github.com/jackh726/chalk/commit/511b4f247e48a5b0d8ddc5e8bf84f0e3c1cd3337">https://github.com/jackh726/chalk/commit/511b4f247e48a5b0d8ddc5e8bf84f0e3c1cd3337</a></p>



<a name="179067684"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067684" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067684">(Oct 25 2019 at 16:50)</a>:</h4>
<p>is that in the PR, <span class="user-mention" data-user-id="232957">@Jack Huey</span> ?</p>



<a name="179067722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067722">(Oct 25 2019 at 16:50)</a>:</h4>
<p>Not in the PR because tests are failing, but I could push it to the PR branch</p>



<a name="179067735"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067735" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067735">(Oct 25 2019 at 16:50)</a>:</h4>
<p>I'd say push it to the PR branch</p>



<a name="179067747"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067747" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067747">(Oct 25 2019 at 16:51)</a>:</h4>
<p>it's usually easier to give feedback if there's an open PR</p>



<a name="179067753"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067753" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067753">(Oct 25 2019 at 16:51)</a>:</h4>
<p>will do</p>



<a name="179067866"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179067866" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179067866">(Oct 25 2019 at 16:52)</a>:</h4>
<p>Ok PR is updated</p>



<a name="179068061"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179068061" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179068061">(Oct 25 2019 at 16:54)</a>:</h4>
<p>Overall, all but 19 tests pass</p>



<a name="179263390"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179263390" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179263390">(Oct 28 2019 at 18:55)</a>:</h4>
<p>Btw <span class="user-mention" data-user-id="116009">@nikomatsakis</span> I've updated the PR and rebased to master</p>



<a name="179855749"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179855749" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179855749">(Nov 04 2019 at 17:41)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> Working off of the work I've done so far (using the coinduction fix branch as a base), I was able to make <code>Table</code> store <code>Strand</code>s rather than <code>CanonicalStrand</code>s</p>



<a name="179855761"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179855761" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179855761">(Nov 04 2019 at 17:41)</a>:</h4>
<p>the only test not passing is <code>only_draw_so_many_blow_up</code></p>



<a name="179855859"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179855859" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179855859">(Nov 04 2019 at 17:42)</a>:</h4>
<p>but I think it's probably because new <code>InferenceTable</code>s aren't being created</p>



<a name="179863423"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179863423" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179863423">(Nov 04 2019 at 19:00)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> great! Sorry i've not finalized my review of your PRs yet</p>



<a name="179863454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179863454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179863454">(Nov 04 2019 at 19:01)</a>:</h4>
<p>I did read them but I didn't have time to come back to it yet, been having some last-minute demands on my time fri/today</p>



<a name="179863475"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179863475" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179863475">(Nov 04 2019 at 19:01)</a>:</h4>
<p>though from my first read I was very happy with the coinduction PR</p>



<a name="179863486"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/simplify%20chalk%20context%20trait%20and%20logic-engine%20%23255/near/179863486" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/simplify.20chalk.20context.20trait.20and.20logic-engine.20.23255.html#179863486">(Nov 04 2019 at 19:01)</a>:</h4>
<p>No problem :)</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>